<?php
// +----------------------------------------------------------------------
// | Description: 规则
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------

namespace app\admin\model;

use \think\facade\Db;

class Rule extends Common
{
    /**
     * 为了数据库的整洁，同时又不影响Model和Controller的名称
     * 我们约定每个模块的数据表都加上相同的前缀，比如CRM模块用crm作为数据表前缀
     */
    protected $name = 'admin_rule';

    /**
     * [getDataList 获取列表]
     * @param     string   $type [是否为树状结构]
     * @param     int   $pid 角色分类：0客户自定义角色,1系统默认管理角色,2客户管理角色,3人力资源管理角色,4财务管理角色,5项目管理角色,6办公管理角色
     * @return    [array]
     */
    public function getDataList($param)
    {

        $type = $param['type'];
        $types = [];
        //$groupPid = $param['pid'] ?? 0;
        //$types = $this->groupsToRules($groupPid);
        // 若type为tree，则返回树状结构
        if ($type == 'tree') {
            $cat = new \com\Category('admin_rule', array('id', 'pid', 'title', 'title'));
            $data = $cat->getList('', 0, 'id');
           //得到所有菜单列表
            foreach ($data as $k => $v) {

                $data[$k]['check'] = false;
                if ($types && !in_array((int)$v['types'], $types)) {
                    unset($data[$k]);
                }
                if (empty($v['status'])) {
                    unset($data[$k]);
                }
            }
            $data = array_merge($data);
            $tree = new \com\Tree();
            $list = $tree->list_to_tree($data, 'id', 'pid', 'child', 0, true, array('pid'));
        } elseif ($types) {
            $types = implode(',', $types);
            $where = [
                ['types', 'in', $types]
            ];
            $list = Db::name('admin_rule')->where($where)->select()->toArray();
        }
        return $list;
    }

    //添加规则
    public function createData($param)
    {
        if($param['pid'] && $param['name']&&$param['title']){
            $pdet = Db::name('admin_rule')->where('id ='.$param['pid'].'')->find();
            if ($pdet['level'] == 1) {
                $data['level'] = 2;
            } elseif ( $pdet['level'] == 2){
                $data['level'] = 3;
            } else {
                $this->error = '等级参数错误';
                return false;
            }
            $data['pid'] = $param['pid']; //上级ID
            $data['name'] = $param['name']; //方法名
            $data['title'] = $param['title'];//名称
            $data['status'] = 1;  //状态1 显示

            //1超级管理员2系统设置管理员3部门与员工管理员4审批流管理员5工作台管理员6客户管理员7项目管理员8公告管理员
            $data['types'] = 2;
            $flag = $this->insert($data);
            if ($flag) {
                return true;
            } else {
                $this->error = '添加失败';
                return false;
            }
        } else {
            $this->error = '参数错误';
            return false;
        }
    }

    //编辑规则
    public function updateDataById($param,$id)
    {
        if ($param['id']) {
            $flag = $this->where('id ='.$param['id'].'')->update($param);
            return true;
        } else {
            $this->error = '参数错误';
            return false;
        }
    }

    /**
     * 角色与规则对照表
     * @param $groupPid 角色分类：0客户自定义角色,1系统默认管理角色,2客户管理角色,3人力资源管理角色(原客户),4财务管理角色(原客户),5项目管理角色,6办公管理角色,7人力资源管理角色,8财务管理角色
     * @param  rule：types 0系统设置1工作台2客户管理3项目管理4人力资源5财务管理6商业智能(客戶)
     * @return
     */
    public function groupsToRules($groupPid)
    {
        $ruleTypes = [];
        switch ($groupPid) {
            case '0' :
            case '2' :
                $ruleTypes = ['2','6'];
                break;
            case '1' :
                $ruleTypes = ['0'];
                break;
            case '5' :
                $ruleTypes = ['3'];
                break;
            case '6' :
                $ruleTypes = ['1','7'];
                break;
            default : $ruleTypes = [$groupPid];
                break;
        }
        return $ruleTypes;
    }
}
